package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo11partitionBy {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf()
      .setMaster("local")
      .setAppName("MapValues算子演示")

    val sc: SparkContext = new SparkContext(conf)

    val linesRDD: RDD[String] = sc.textFile("spark/data/wcs/*")

    /**
     * mapPartitions：一次处理一个分区中的数据
     * 它与map的区别在于，map是每次处理一条数据就返回一条数据到下一个rdd
     * 而mapPartitions一次处理一个分区的数据，处理完再返回
     * 最后的处理效果和map的处理效果是一样的
     *
     * mapPartition可以优化与数据库连接的次数
     */
    val rdd1: RDD[String] = linesRDD.mapPartitions((itr: Iterator[String]) => {
      println("=========================================")
      itr.map((e: String) => {
        e
      })
    })

//    linesRDD.map((e:String)=>{
//      //...数据库连接
//    })

    rdd1.foreach(println)


  }
}
